package com.ujs.shc.service;

import com.ujs.shc.dto.CommentsAndInfosDto;
import com.ujs.shc.dto.PreOrders;
import com.ujs.shc.dto.SixGoodsByCatelogDto;
import com.ujs.shc.pojo.Goods;
import com.ujs.shc.pojo.GoodsExt2;
import com.ujs.shc.pojo.Orders;

import java.util.List;

public interface GoodsService {

    /**
     * 获取首页所有分类下面的商品
     */
    public List<SixGoodsByCatelogDto> getSixGoodsByCatelog();

    /**
     * 获取某个分类的全部商品 （分页）
     * @param cateId
     * @param limit
     * @param page
     * @return
     */
    public List<GoodsExt2> getGoodsesById(Integer cateId, Integer limit, Integer page);

    /**
     * 根据商品类别获取商品个数
     * @param cateId
     * @return
     */
    public Integer getGoodsesCountById(Integer cateId);

    /**
     * 根据商品id获取商品(status =1 商品未下架才有)
     * @param goodsId
     * @return
     */
    public CommentsAndInfosDto getGoodsAndComAndInfoByGid(Integer goodsId);


    /**
     * 添加商品
     * @param good
     * @return
     */
    public Integer addGoods(Goods good);

    /**
     * 根据用户id获得其关注的商品
     * @param uid
     * @return
     */
    public List<Goods> getFocusGoodsesByUid(Integer uid);

    /**
     * 根据商品名或者描述搜索商品
     * @param goodsInfo
     * @return
     */
    public List<GoodsExt2> searchGoods(String goodsInfo, Integer limit, Integer page);

    /**
     * 根据用户id查询商品
     * @param userId
     * @return
     */
    List<GoodsExt2> getGoodsesByUid(Integer userId);

    /**
     * 通过主键查询商品(status=1 商品未下架)
     * @param goodsId
     * @return
     */
    Goods getGoodsByPrimaryKey(Integer goodsId);

    /**
     * 通过主键查询商品(不考虑状态)
     * @param goodsId
     * @return
     */
    Goods getGoodsByPrimaryKeyWithoutStatus(Integer goodsId);

    /**
     * 将商品下架
     * @param goodsId
     * @return
     */
    Integer withdrawGoods(Integer goodsId);

    /**
     * 根据用户id 和 商品id生成预订单
     * @param uid
     * @param goodsId
     * @return
     */
    PreOrders getPreOrders(Integer uid, Integer goodsId);

    /**
     * 同搜索条件查询商品数量
     * @param goodsInfo
     * @return
     */
    public Integer getCountGoodsByNameOrDesc(String goodsInfo);

    /**
     * 添加订单
     *
     * @param orders
     * @return
     */
    Integer addOrders(Orders orders);

    /**
     * 删除订单
     * @param goodsId
     * @return
     */
    Integer rmGoods(Integer goodsId);
}
